//+------------------------------------------------------------------+ //| Pivot.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_chart_window extern bool pivots = true; extern bool camarilla = true; extern bool midpivots = true; extern int pivots_offset = 20; extern int camarilla_offset = 35; extern int midpivots_offset = 20; double day_high=0; double day_low=0; double yesterday_high=0; double yesterday_open=0; double yesterday_low=0; double yesterday_close=0; double today_open=0; double today_high=0; double today_low=0; double P=0; double Q=0; double Range=0; double R1,R2,R3,R4; double MS3_5,MS2_5,MS1_5,MS0_5,MR0_5,MR1_5,MR2_5,MR3_5; double S1,S2,S3,S4; double H5,H4,H3,L5,L4,L3; double nQ=0; double nD=0; double D=0; double rates_d1[2][6]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators R1=0; R2=0; R3=0; R4=0; MR0_5=0; MR1_5=0; MR2_5=0; MR3_5=0; MS0_5=0; MS1_5=0; MS2_5=0; MS3_5=0; S1=0; S2=0; S3=0; S4=0; H5=0; H4=0; H3=0; L5=0; L4=0; L3=0; //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here ObjectDelete("R1 Label"); ObjectDelete("R1 Line"); ObjectDelete("R2 Label"); ObjectDelete("R2 Line"); ObjectDelete("R3 Label"); ObjectDelete("R3 Line"); ObjectDelete("R4 Label"); ObjectDelete("R4 Line"); ObjectDelete("S1 Label"); ObjectDelete("S1 Line"); ObjectDelete("S2 Label"); ObjectDelete("S2 Line"); ObjectDelete("S3 Label"); ObjectDelete("S3 Line"); ObjectDelete("S4 Label"); ObjectDelete("S4 Line"); ObjectDelete("P Label"); ObjectDelete("P Line"); ObjectDelete("H5 Label"); ObjectDelete("H5 Line"); ObjectDelete("H4 Label"); ObjectDelete("H4 Line"); ObjectDelete("H3 Label"); ObjectDelete("H3 Line"); ObjectDelete("L3 Label"); ObjectDelete("L3 Line"); ObjectDelete("L4 Label"); ObjectDelete("L4 Line"); ObjectDelete("L5 Label"); ObjectDelete("L5 Line"); ObjectDelete("MR3_5 Label"); ObjectDelete("MR3_5 Line"); ObjectDelete("MR2_5 Label"); ObjectDelete("MR2_5 Line"); ObjectDelete("MR1_5 Label"); ObjectDelete("MR1_5 Line"); ObjectDelete("MR0_5 Label"); ObjectDelete("MR0_5 Line"); ObjectDelete("MS0_5 Label"); ObjectDelete("MS0_5 Line"); ObjectDelete("MS1_5 Label"); ObjectDelete("MS1_5 Line"); ObjectDelete("MS2_5 Label"); ObjectDelete("MS2_5 Line"); ObjectDelete("MS3_5 Label"); ObjectDelete("MS3_5 Line"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- TODO: add your code here //---- exit if period is greater than daily charts if(Period() > 1440) { Print("Error - Chart period is greater than 1 day."); return(-1); // then exit } //---- Get new daily prices ArrayCopyRates(rates_d1, Symbol(), PERIOD_D1); yesterday_close = rates_d1[1][4]; yesterday_open = rates_d1[1][1]; today_open = rates_d1[0][1]; yesterday_high = rates_d1[1][3]; yesterday_low = rates_d1[1][2]; day_high = rates_d1[0][3]; day_low = rates_d1[0][2]; //---- Calculate Pivots D = (day_high - day_low); Q = (yesterday_high - yesterday_low); Range = Q; P = (yesterday_high + yesterday_low + yesterday_close) / 3; /* R1 = (2*P)-yesterday_low; S1 = (2*P)-yesterday_high; R2 = P+Range; S2 = P-Range; R3 = (2*P)+(yesterday_high-(2*yesterday_low)); S3 = (2*P)-((2* yesterday_high)-yesterday_low); R4 = (2*P)+(yesterday_high-(3*yesterday_low)); S4 = (2*P)-((3* yesterday_high)-yesterday_low); */ R1 = (2*P)-yesterday_low; S1 = (2*P)-yesterday_high; R2 = P+Range; S2 = P-Range; R3 = P+Range*2; S3 = P-Range*2; R4 = P+Range*3; S4 = P-Range*3; MR0_5 = (P+R1)/2; MS0_5 = (P+S1)/2; MR1_5 = (R1+R2)/2; MS1_5 = (S1+S2)/2; MR2_5 = (R2+R3)/2; MS2_5 = (S2+S3)/2; MR3_5 = (R3+R4)/2; MS3_5 = (S3+S4)/2; H5 = (yesterday_high/yesterday_low)*yesterday_close; H4 = (Q*0.55)+yesterday_close; H3 = (Q*0.27)+yesterday_close; L3 = yesterday_close-(Q*0.27); L4 = yesterday_close-(Q*0.55); L5 = yesterday_close-((yesterday_high/yesterday_low)*yesterday_close-yesterday_close); if (Q > 5) { nQ = Q; } else { nQ = Q*10000; } if (D > 5) { nD = D; } else { nD = D*10000; } Comment("High= ",yesterday_high," Previous Days Range= ",nQ,"\nLow= ",yesterday_low," Current Days Range= ",nD,"\nClose= ",yesterday_close); //---- Set line labels on chart window //---- Pivot Lines if (pivots==true) { if(ObjectFind("R1 label") != 0) { ObjectCreate("R1 label", OBJ_TEXT, 0, Time[pivots_offset], R1); ObjectSetText("R1 label", " R1", 8, "Arial", White); } else { ObjectMove("R1 label", 0, Time[pivots_offset], R1); } if(ObjectFind("R2 label") != 0) { ObjectCreate("R2 label", OBJ_TEXT, 0, Time[pivots_offset], R2); ObjectSetText("R2 label", " R2", 8, "Arial", White); } else { ObjectMove("R2 label", 0, Time[pivots_offset], R2); } if(ObjectFind("R3 label") != 0) { ObjectCreate("R3 label", OBJ_TEXT, 0, Time[pivots_offset], R3); ObjectSetText("R3 label", " R3", 8, "Arial", White); } else { ObjectMove("R3 label", 0, Time[pivots_offset], R3); } if(ObjectFind("R4 label") != 0) { ObjectCreate("R4 label", OBJ_TEXT, 0, Time[pivots_offset], R4); ObjectSetText("R4 label", " R4", 8, "Arial", White); } else { ObjectMove("R4 label", 0, Time[pivots_offset], R4); } if(ObjectFind("P label") != 0) { ObjectCreate("P label", OBJ_TEXT, 0, Time[pivots_offset], P); ObjectSetText("P label", "Pivot", 8, "Arial", White); } else { ObjectMove("P label", 0, Time[pivots_offset], P); } if(ObjectFind("S1 label") != 0) { ObjectCreate("S1 label", OBJ_TEXT, 0, Time[pivots_offset], S1); ObjectSetText("S1 label", "S1", 8, "Arial", White); } else { ObjectMove("S1 label", 0, Time[pivots_offset], S1); } if(ObjectFind("S2 label") != 0) { ObjectCreate("S2 label", OBJ_TEXT, 0, Time[pivots_offset], S2); ObjectSetText("S2 label", "S2", 8, "Arial", White); } else { ObjectMove("S2 label", 0, Time[pivots_offset], S2); } if(ObjectFind("S3 label") != 0) { ObjectCreate("S3 label", OBJ_TEXT, 0, Time[pivots_offset], S3); ObjectSetText("S3 label", "S3", 8, "Arial", White); } else { ObjectMove("S3 label", 0, Time[pivots_offset], S3); } if(ObjectFind("S4 label") != 0) { ObjectCreate("S4 label", OBJ_TEXT, 0, Time[pivots_offset], S4); ObjectSetText("S4 label", "S4", 8, "Arial", White); } else { ObjectMove("S4 label", 0, Time[pivots_offset], S4); } //--- Draw Pivot lines on chart if(ObjectFind("S1 line") != 0) { ObjectCreate("S1 line", OBJ_HLINE, 0, Time[40], S1); ObjectSet("S1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S1 line", OBJPROP_COLOR, Red); } else { ObjectMove("S1 line", 0, Time[40], S1); } if(ObjectFind("S2 line") != 0) { ObjectCreate("S2 line", OBJ_HLINE, 0, Time[40], S2); ObjectSet("S2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S2 line", OBJPROP_COLOR, Red); } else { ObjectMove("S2 line", 0, Time[40], S2); } if(ObjectFind("S3 line") != 0) { ObjectCreate("S3 line", OBJ_HLINE, 0, Time[40], S3); ObjectSet("S3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S3 line", OBJPROP_COLOR, Red); } else { ObjectMove("S3 line", 0, Time[40], S3); } if(ObjectFind("S4 line") != 0) { ObjectCreate("S4 line", OBJ_HLINE, 0, Time[40], S4); ObjectSet("S4 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S4 line", OBJPROP_COLOR, Red); } else { ObjectMove("S4 line", 0, Time[40], S4); } if(ObjectFind("P line") != 0) { ObjectCreate("P line", OBJ_HLINE, 0, Time[40], P); ObjectSet("P line", OBJPROP_STYLE, STYLE_DOT); ObjectSet("P line", OBJPROP_COLOR, Magenta); } else { ObjectMove("P line", 0, Time[40], P); } if(ObjectFind("R1 line") != 0) { ObjectCreate("R1 line", OBJ_HLINE, 0, Time[40], R1); ObjectSet("R1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R1 line", OBJPROP_COLOR, LimeGreen); } else { ObjectMove("R1 line", 0, Time[40], R1); } if(ObjectFind("R2 line") != 0) { ObjectCreate("R2 line", OBJ_HLINE, 0, Time[40], R2); ObjectSet("R2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R2 line", OBJPROP_COLOR, LimeGreen); } else { ObjectMove("R2 line", 0, Time[40], R2); } if(ObjectFind("R3 line") != 0) { ObjectCreate("R3 line", OBJ_HLINE, 0, Time[40], R3); ObjectSet("R3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R3 line", OBJPROP_COLOR, LimeGreen); } else { ObjectMove("R3 line", 0, Time[40], R3); } if(ObjectFind("R4 line") != 0) { ObjectCreate("R4 line", OBJ_HLINE, 0, Time[40], R4); ObjectSet("R4 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R4 line", OBJPROP_COLOR, LimeGreen); } else { ObjectMove("R4 line", 0, Time[40], R4); } } //---- End of Pivot Line Draw //----- Camarilla Lines if (camarilla==true) { if(ObjectFind("H5 label") != 0) { ObjectCreate("H5 label", OBJ_TEXT, 0, Time[camarilla_offset], H5); ObjectSetText("H5 label", " H5", 8, "Arial", White); } else { ObjectMove("H5 label", 0, Time[camarilla_offset], H5); } if(ObjectFind("H4 label") != 0) { ObjectCreate("H4 label", OBJ_TEXT, 0, Time[camarilla_offset], H4); ObjectSetText("H4 label", " H4", 8, "Arial", White); } else { ObjectMove("H4 label", 0, Time[camarilla_offset], H4); } if(ObjectFind("H3 label") != 0) { ObjectCreate("H3 label", OBJ_TEXT, 0, Time[camarilla_offset], H3); ObjectSetText("H3 label", " H3", 8, "Arial", White); } else { ObjectMove("H3 label", 0, Time[camarilla_offset], H3); } if(ObjectFind("L3 label") != 0) { ObjectCreate("L3 label", OBJ_TEXT, 0, Time[camarilla_offset], L3); ObjectSetText("L3 label", " L3", 8, "Arial", White); } else { ObjectMove("L3 label", 0, Time[camarilla_offset], L3); } if(ObjectFind("L4 label") != 0) { ObjectCreate("L4 label", OBJ_TEXT, 0, Time[camarilla_offset], L4); ObjectSetText("L4 label", " L4", 8, "Arial", White); } else { ObjectMove("L4 label", 0, Time[camarilla_offset], L4); } if(ObjectFind("L5 label") != 0) { ObjectCreate("L5 label", OBJ_TEXT, 0, Time[camarilla_offset], L5); ObjectSetText("L5 label", " L5", 8, "Arial", White); } else { ObjectMove("L5 label", 0, Time[camarilla_offset], L5); } //---- Draw Camarilla lines on Chart if(ObjectFind("H5 line") != 0) { ObjectCreate("H5 line", OBJ_HLINE, 0, Time[40], H5); ObjectSet("H5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("H5 line", OBJPROP_COLOR, Yellow); } else { ObjectMove("H5 line", 0, Time[40], H5); } if(ObjectFind("H4 line") != 0) { ObjectCreate("H4 line", OBJ_HLINE, 0, Time[40], H4); ObjectSet("H4 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("H4 line", OBJPROP_COLOR, Yellow); } else { ObjectMove("H4 line", 0, Time[40], H4); } if(ObjectFind("H3 line") != 0) { ObjectCreate("H3 line", OBJ_HLINE, 0, Time[40], H3); ObjectSet("H3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("H3 line", OBJPROP_COLOR, Yellow); } else { ObjectMove("H3 line", 0, Time[40], H3); } if(ObjectFind("L3 line") != 0) { ObjectCreate("L3 line", OBJ_HLINE, 0, Time[40], L3); ObjectSet("L3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("L3 line", OBJPROP_COLOR, Yellow); } else { ObjectMove("L3 line", 0, Time[40], L3); } if(ObjectFind("L4 line") != 0) { ObjectCreate("L4 line", OBJ_HLINE, 0, Time[40], L4); ObjectSet("L4 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("L4 line", OBJPROP_COLOR, Yellow); } else { ObjectMove("L4 line", 0, Time[40], L4); } if(ObjectFind("L5 line") != 0) { ObjectCreate("L5 line", OBJ_HLINE, 0, Time[40], L5); ObjectSet("L5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("L5 line", OBJPROP_COLOR, Yellow); } else { ObjectMove("L5 line", 0, Time[40], L5); } } //-------End of Draw Camarilla Lines //------ Midpoints Pivots if (midpivots==true) { if(ObjectFind("MR3_5 label") != 0) { ObjectCreate("MR3_5 label", OBJ_TEXT, 0, Time[midpivots_offset], MR3_5); ObjectSetText("MR3_5 label", " MR3.5", 8, "Arial", White); } else { ObjectMove("MR3_5 label", 0, Time[midpivots_offset], MR3_5); } if(ObjectFind("MR2_5 label") != 0) { ObjectCreate("MR2_5 label", OBJ_TEXT, 0, Time[midpivots_offset], MR2_5); ObjectSetText("MR2_5 label", " MR2.5", 8, "Arial", White); } else { ObjectMove("MR2_5 label", 0, Time[midpivots_offset], MR2_5); } if(ObjectFind("MR1_5 label") != 0) { ObjectCreate("MR1_5 label", OBJ_TEXT, 0, Time[midpivots_offset], MR1_5); ObjectSetText("MR1_5 label", " MR1.5", 8, "Arial", White); } else { ObjectMove("MR1_5 label", 0, Time[midpivots_offset], MR1_5); } if(ObjectFind("MR0_5 label") != 0) { ObjectCreate("MR0_5 label", OBJ_TEXT, 0, Time[midpivots_offset], MR0_5); ObjectSetText("MR0_5 label", " MR0.5", 8, "Arial", White); } else { ObjectMove("MR0_5 label", 0, Time[midpivots_offset], MR0_5); } if(ObjectFind("MS0_5 label") != 0) { ObjectCreate("MS0_5 label", OBJ_TEXT, 0, Time[midpivots_offset], MS0_5); ObjectSetText("MS0_5 label", " MS0.5", 8, "Arial", White); } else { ObjectMove("MS0_5 label", 0, Time[midpivots_offset], MS0_5); } if(ObjectFind("MS1_5 label") != 0) { ObjectCreate("MS1_5 label", OBJ_TEXT, 0, Time[midpivots_offset], MS1_5); ObjectSetText("MS1_5 label", " MS1.5", 8, "Arial", White); } else { ObjectMove("MS1_5 label", 0, Time[midpivots_offset], MS1_5); } if(ObjectFind("MS2_5 label") != 0) { ObjectCreate("MS2_5 label", OBJ_TEXT, 0, Time[20], MS2_5); ObjectSetText("MS2_5 label", " MS2.5", 8, "Arial", White); } else { ObjectMove("MS2_5 label", 0, Time[midpivots_offset], MS2_5); } if(ObjectFind("MS3_5 label") != 0) { ObjectCreate("MS3_5 label", OBJ_TEXT, 0, Time[20], MS3_5); ObjectSetText("MS3_5 label", " MS3.5", 8, "Arial", White); } else { ObjectMove("MS3_5 label", 0, Time[midpivots_offset], MS3_5); } //---- Draw Midpoint Pivots on Chart if(ObjectFind("MR3_5 line") != 0) { ObjectCreate("MR3_5 line", OBJ_HLINE, 0, Time[40], MR3_5); ObjectSet("MR3_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MR3_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MR3_5 line", 0, Time[40], MR3_5); } if(ObjectFind("MR2_5 line") != 0) { ObjectCreate("MR2_5 line", OBJ_HLINE, 0, Time[40], MR2_5); ObjectSet("MR2_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MR2_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MR2_5 line", 0, Time[40], MR2_5); } if(ObjectFind("MR1_5 line") != 0) { ObjectCreate("MR1_5 line", OBJ_HLINE, 0, Time[40], MR1_5); ObjectSet("MR1_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MR1_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MR1_5 line", 0, Time[40], MR1_5); } if(ObjectFind("MR0_5 line") != 0) { ObjectCreate("MR0_5 line", OBJ_HLINE, 0, Time[40], MR0_5); ObjectSet("MR0_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MR0_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MR0_5 line", 0, Time[40], MR0_5); } if(ObjectFind("MS0_5 line") != 0) { ObjectCreate("MS0_5 line", OBJ_HLINE, 0, Time[40], MS0_5); ObjectSet("MS0_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MS0_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MS0_5 line", 0, Time[40], MS0_5); } if(ObjectFind("MS1_5 line") != 0) { ObjectCreate("MS1_5 line", OBJ_HLINE, 0, Time[40], MS1_5); ObjectSet("MS1_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MS1_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MS1_5 line", 0, Time[40], MS1_5); } if(ObjectFind("MS2_5 line") != 0) { ObjectCreate("MS2_5 line", OBJ_HLINE, 0, Time[40], MS2_5); ObjectSet("MS2_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MS2_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MS2_5 line", 0, Time[40], MS2_5); } if(ObjectFind("MS3_5 line") != 0) { ObjectCreate("MS3_5 line", OBJ_HLINE, 0, Time[40], MS3_5); ObjectSet("MS3_5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("MS3_5 line", OBJPROP_COLOR, Blue); } else { ObjectMove("MS3_5 line", 0, Time[40], MS3_5); } } //----End of Midpoint Pivots Draw //---- End Of Program return(0); } //+------------------------------------------------------------------+